#ifndef LOGICBINARYOP_H
#define LOGICBINARYOP_H
#include "booleanExpression.h"
#include <string>

/*Class: LogicBinaryOperation
 *	A Class that represents a binary operation for Boolean Expressions
 *See Also: <BooleanExpression> <Expression>
 */
class LogicBinaryOperation: public BooleanExpression {

protected:
	 /* Variable leftOperand:
	  *	the left operand of the binary expression
	  */
	 Expression * leftOperand;
	 /* Variable rightOperand:
	  *	the right operand of the binary expression
	  */
	 Expression * rightOperand;
	 /* Variable operatorRepresentation:
	  * 	String representation of the operator
	  */
	 std::string operatorRepresentation;
public:
	/*Constructor:LogicBinaryOperation
	 * Initialize the object with the specified parameters.
	 * Parameters:
	 * 	leftExpression - The left boolean expression of the operation.
	 * 	opRep	- The string representation of the operator.
	 * 	rightExpression - The right boolean expresion of the operation.
	 */
	LogicBinaryOperation(Expression * leftExpresion = NULL, std::string opRep = "", Expression * rightExpression = NULL);

	LogicBinaryOperation(const LogicBinaryOperation & other);

	virtual ~LogicBinaryOperation();

	std::string toString();

	virtual Expression * clone();

	Expression * getRightExpression();

	Expression * getLeftExpression();

	void setRightExpression(Expression * expression);

	void setLeftExpression(Expression * expression);

	void setOperator(const std::string & opRep);

	std::string getOperator();
};
#endif
